Привет!
Репозиторий содержит в себе тестовое задание и его решение.

## Тестовое задание
-- Задачи по sql.

--Входные данные. Даны 3 таблицы dep, emp, fin
dep: id, name
emp: id, name, dep_id, age, salary
fin: month, emp_id, salary, sum_salary

dep:
1, Бухгалтерия
2, Кадры

emp:
1, Иванов, 1, 45, 100
2, Петров, 1, 34, 86
3, Петров, 1, 18, 75
4, Петров, 1, 56, 92
5, Сидоров, 1, 28, 101
6, Сидоров, 1, 37, 79
7, Сидоров, 2, 31, 55
8, Сидоров, 2, 30, 67
9, Федотов, 2, 18, 43
-----------------------------------------------


-- 1 Задание. даны таблицы emp и dep. необходимо посчитать количество однофамильцев в отделах.
-- итоговый результат:
Бухгалтерия, 5
Кадры, 2


-- 2 Задание. дана таблица fin с заполненными полями month, emp_id, salary. необходимо посчитать нарастающий итог по каждому сотруднику.
-- результат отобразить в поле sum_salary
fin: month, emp_id, salary, sum_salary
1, 1, 50, 50 	
2, 1, 50, 100 
3, 1, 50, 150
1, 2, 60, 60 
2, 2, 60, 120 
3, 2, 60, 180


-- 3 Задание. имеется таблица dep2 в которой появились полные дубли записей.
-- необходимо восстановление уникальности записей в таблице и привести ее к виду dep1
dep1
1, Бухгалтерия
2, Кадры

dep2
1, Бухгалтерия 1
1, Бухгалтерия 2
1, Бухгалтерия 3
1, Бухгалтерия 4
1, Бухгалтерия 5
2, Кадры 1
2, Кадры 2
2, Кадры 3



-- 4 Задание. Оптимизация запросов в SQL

Имеется база, в которой есть столбец с датой и временем - они указаны по Гринвицу (-3 от МСК)
На столбец start_date есть индекс.
Как оптимизировать следующий запрос, если дата и время на выходе нам нужны уже по МСК:

declare @start as datetime = '2000-03-01 00:00:00'
;
declare @end   as datetime = '2000-03-31 23:59:59'
;

select  name
	, start_date as time_utc
	, dateadd(hour, 3, start_date) as time_msk
from DQ.DB.employers
where dateadd(hour, 3, start_date) between @start and @end   
;






-- Python
-- 5 Задание. дана ведомость в которой два столбца - отдел и сотрудник.
-- необходимо подсчитать количество уникальных сотрудников в каждом отделе. результат отразить в поле Сnt
df: A, B
Отдел Сотрудник     Сnt
1     1             3
1     2             3
2     3             1
3     6             1
1     7             3
3     6             1




-- 6 Задание. Python
-- дан df содержащий количество авторизаций сотрудников по неделям. 
-- необходимо посчитать количество авторизаций по каждому сотруднику за каждую неделю и суммарное количество с начала периода.
-- результат отразить в полях cnt и sum
df = pd.DataFrame({'w':[1,1,2,2,2,3,3,3,4,4,4], 
                   'user':['User2', 'User3','User1','User1','User2','User2','User2','User3','User1','User1','User3'],
                   'c':[7,2,3,1,2,5,4,6,9,8,7]})

-----------------------------------------------
Входные данные:
w=week        user       cnt              
1             User2    7
1             User3    2
2             User1    3
2             User1    1
2             User2    2
3             User2    5
3             User2    4
3             User3    6
4             User1    9
4             User1    8
4             User3    7
-----------------------------------------------
На выходе получаем:
w            user       cnt           sum       
1             User1    0              0
1             User2    7              7
1             User3    2              2
2             User1    4              4
2             User2    2              9
2             User3    0              2
3             User1    0              4
3             User2    9              18
3             User3    6              8
4             User1    17             21
4             User2    0              18
4             User3    7              15
-----------------------------------------------




